[LeetCode 3]Longest Substring Without Repeating Characters 无重复字符的最长子串
Problem description:
Given a string, find the length of the longest substring without repeating characters.
Example:
1 | Given "abcabcbb", the answer is "abc", which the length is 3. |
问题描述:
给定一个字符串,找出不含有重复字符的最长子串的长度。
说明:解集不能包含重复的子集。
示例:
1 | 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。 |
Solution:
Solution 1: 遍历char数组,put到map<字符,字符下标>中,若当前元素在map中,则将下表置为当前元素在map中的重复值的角标+1,继续遍历,复杂度O(N2)
Code:
1 | //beat 18% |
Solution 2:(优化的滑动窗口)
(i,j)作为一个窗口,让j滑动,并将j位置的字符放到map中,当map包含j位置的字符时,(未优化的滑动窗口是让i滑动,直到i,j不包含重复字符串),i取map中j字符所在位置+1和i的最大值(考虑baab字符串,就明白为什么i取两者之间的大者),向hashmap添加重复元素时会覆盖原来的值。时间复杂度为O(n)。
Code:
1 | //beat 67% |